package com.edu.exam.enums.examination.security;

/**
 * 安全警报类型枚举
 *
 * 从SecurityAlert.AlertType迁移而来
 * 定义考试安全系统中可能出现的各种警报类型
 *
 * @author System
 * @version 1.0.0
 */
public enum SecurityAlertType {

    /**
     * 身份验证异常
     */
    AUTHENTICATION_FAILURE("AUTHENTICATION_FAILURE", "身份验证异常"),

    /**
     * 作弊行为检测
     */
    CHEATING_DETECTED("CHEATING_DETECTED", "作弊行为检测"),

    /**
     * 异常登录行为
     */
    ABNORMAL_LOGIN("ABNORMAL_LOGIN", "异常登录行为"),

    /**
     * 设备异常
     */
    DEVICE_ANOMALY("DEVICE_ANOMALY", "设备异常"),

    /**
     * 网络异常
     */
    NETWORK_ANOMALY("NETWORK_ANOMALY", "网络异常"),

    /**
     * 时间异常
     */
    TIME_ANOMALY("TIME_ANOMALY", "时间异常"),

    /**
     * 位置异常
     */
    LOCATION_ANOMALY("LOCATION_ANOMALY", "位置异常"),

    /**
     * 系统入侵尝试
     */
    INTRUSION_ATTEMPT("INTRUSION_ATTEMPT", "系统入侵尝试"),

    /**
     * 数据泄露风险
     */
    DATA_LEAK_RISK("DATA_LEAK_RISK", "数据泄露风险"),

    /**
     * 权限滥用
     */
    PRIVILEGE_ABUSE("PRIVILEGE_ABUSE", "权限滥用");

    private final String code;
    private final String description;

    SecurityAlertType(String code, String description) {
        this.code = code;
        this.description = description;
    }

    public String getCode() {
        return code;
    }

    public String getDescription() {
        return description;
    }

    /**
     * 根据编码获取对应的枚举
     *
     * @param code 编码
     * @return 对应的枚举
     */
    public static SecurityAlertType fromCode(String code) {
        for (SecurityAlertType type : values()) {
            if (type.getCode().equals(code)) {
                return type;
            }
        }
        throw new IllegalArgumentException("Unknown security alert type code: " + code);
    }

    /**
     * 根据描述获取对应的枚举
     *
     * @param description 描述
     * @return 对应的枚举
     */
    @Override
    public String toString() {
        return description;
    }
}
